Crate const_generic_wrap[][src]

Expand description

Simple wrapper for const generics.

Usage

Currently ‘the type of const parameters must not depend on other generic parameters’ (E0770).

struct A<N, const C : N>(N);

With this crate we can solve this by wrapping cosnt generic.

use const_generic_wrap::*;
struct A<N, C>(N, C) where C : ConstWrap<BaseType = N>;
// WrapU32 is ZST, so the size of A is as same as u32.
assert_eq!(mem::size_of::<WrapU32<12>>(), 0);
assert_eq!(mem::size_of::<A::<u32, WrapU32<12>>>(), mem::size_of::<u32>());

// you can selectively use const or non const
struct B<N, C>(N, C) where C : ConstOrValue<N>, N : Constable; // or it can be C : Into<N>
fn add_b<N, C>(v : B<N, C>) -> N where N : Add<Output = N> + Constable, C : ConstOrValue<N>{
    v.0 + v.1.into()
}
let b_non_const = B(31, 11);
let b_const = B(31, WrapI32::<11>);
assert_eq!(add_b(b_non_const), add_b(b_const));

Structs

Failed to convert to const wrap type.

Const generic wrapper.

Const generic wrapper.

Const generic wrapper.

Const generic wrapper.

Const generic wrapper.

Const generic wrapper.

Const generic wrapper.

Const generic wrapper.

Const generic wrapper.

Const generic wrapper.

Const generic wrapper.

Const generic wrapper.

Traits

A lists of types for a specified values.

Trait that can be a wrapped const generic or a owned value.

Marker that shows it wraps const generic.

Marker that shows it can be used in const generic.